// 路由鉴权
import router from "@/router/index";
// 导入 进度条插件
import nprogress from "nprogress";
import "nprogress/nprogress.css";
// 导入客制化配置文件
import setting from "@/setting";
// 导入 pinia 一级仓库
import pinia from "@/store";
// 获取用户相关的二级仓库内部的 token 数据，用于判断用户是否登录
import useUserStore from "@/store/modules/user";
const userStore = useUserStore(pinia);

// 全局路由守卫：切换路由时会触发的钩子
// 全局前置路由守卫
router.beforeEach(async (to, from, next) => {
  // 为当前路由配置 HTML 文档标题
  document.title = `${setting.title}-${to.meta.title}`;
  // to：目标路由
  // from：来源路由www
  // next：放行
  nprogress.start();
  // 获取用户信息
  const username = userStore.username;
  if (userStore.token) {
    if (to.path === "/login") {
      next({ path: from.path });
    } else {
      if (username) {
        next();
      } else {
        // 没有用户信息就发请求获取
        try {
          // 获取用户信息后放行
          await userStore.userInfo();
          next({ ...to });
        } catch (error) {
          // token 过期
          await userStore.userLogout();
          next({ path: "/login", query: { redirect: to.path } });
        }
      }
    }
  } else {
    if (to.path === "/login") {
      next();
    } else {
      next({ path: "/login", query: { redirect: to.path } });
    }
  }
});

// 全局后置路由守卫
router.afterEach(() => {
  // to：目标路由
  // from：来源路由
  nprogress.done();
});
